﻿--#### 变量
use banktest;
go
select * from AccountInfo  --个人信息
select * from BankCard  --银行卡信息
select * from CardStateChange  --银行卡状态更改表
select * from CardTransfer  --转账表
select * from CardExchange  --交易记录
--1. 为赵云此人进行开户开卡操作，赵云身份证：420107199904054233
insert into AccountInfo values('420107199904054233','13554785425','赵云','2022-09-22 16:43:00')
--2. 需要求出张飞的银行卡卡号和余额，张飞身份证：420107199602034138  （1.使用连接查询，2.使用变量）


select cardno as 银行卡号,cardmoney as 余额 from AccountInfo Ac
inner join BankCard Ba on Ac.AccountId=Ba.AccountId
where AccountCode='420107199602034138'


--#### 逻辑控制

--##### 条件分支if-else

--​	3.某用户银行卡号为“6225547854125656”，该用户执行取钱操作，取钱5000元，余额充足则进行取钱操作，并提示"取钱成功"，否则提示“余额不足”。
--##### 条件分支:case-when
declare @balance money
select @balance =(select CardMoney from BankCard where CardNo = '6225547854125656')
print @balance 
if @balance>=5000
	begin 
	update BankCard set CardMoney=CardMoney-5000 
	 insert into CardExchange(CardNo,MoneyInBank,MoneyOutBank,ExchangeTime)
     values('6225547854125656',0,5000,GETDATE())
	 end
else
	begin
	print '余额不足'
end
print @balance


 
--​	4.查询银行卡信息，将银行卡状态1,2,3,4分别转换为汉字“正常,挂失,冻结,注销”，并且根据银行卡余额显示银行卡等级 30万以下为“普通用户”,30万及以上为"VIP用户"，  

----显示列分别为卡号，身份证，姓名，余额，用户等级，银行卡状态。
select CardNo as 卡号, AccountCode as 身份证,RealName as 姓名, CardPwd as 余额,
case 
	when CardMoney>30000 then '普通用户'
	else 'VIP用户'
end 用户等级,
case 
	when cardstate = 1 then '正常'
	when cardstate = 2 then '挂失'
	when cardstate = 3 then '冻结'
	when cardstate = 4 then '注销'
end 银行卡状态
 from BankCard 
inner join AccountInfo on BankCard.AccountId=AccountInfo.AccountId

--##### **while**

--​	5.循环打印1-10。
declare @a int = 1
while @a < 10
	begin
		print @a
		set @a = @a + 1
	end
print @a

--​	6.打印99乘法表
declare @i int = 1
while @i <= 9
	begin
		declare @j int = 1
		declare @result varchar(200) = ''
		while  @j <= @i
			
			begin
				set @result = @result + cast(@i as varchar(1))+ ' * ' + cast(@j as varchar(1)) + ' = '+ cast(@i*@j as varchar(2)) + char(9)
				set @j = @j + 1
			end
		print @result
		set @i = @i + 1
	end